package com.kehutong.wxapi.service;

import com.kehutong.wxapi.request.BatchGetResultRequest;
import com.kehutong.wxapi.request.BatchReplacePartyRequest;
import com.kehutong.wxapi.request.BatchReplaceUserRequest;
import com.kehutong.wxapi.request.BatchSyncUserRequest;
import com.kehutong.wxapi.response.BatchGetResultResponse;
import com.kehutong.wxapi.response.BatchReplacePartyResponse;
import com.kehutong.wxapi.response.BatchReplaceUserResponse;
import com.kehutong.wxapi.response.BatchSyncUserResponse;
import com.kehutong.wxapi.service.impl.BatchServiceImpl;
import org.coraframework.inject.ImplementedBy;

/**
 * 异步批量服务接口
 */
@ImplementedBy(BatchServiceImpl.class)
public interface BatchService {
    /**
     * 增量更新成员
     * 本接口以userid（帐号）为主键，增量更新企业微信通讯录成员。请先下载CSV模板(下载增量更新成员模版)，根据需求填写文件内容。
     *
     * 注意事项：
     *
     * 模板中的部门需填写部门ID，多个部门用分号分隔，部门ID必须为数字，根部门的部门id默认为1
     * 文件中存在、通讯录中也存在的成员，更新成员在文件中指定的字段值
     * 文件中存在、通讯录中不存在的成员，执行添加操作
     * 通讯录中存在、文件中不存在的成员，保持不变
     * 成员字段更新规则：可自行添加扩展字段。文件中有指定的字段，以指定的字段值为准；文件中没指定的字段，不更新
     * 请求地址：https://qyapi.weixin.qq.com/cgi-bin/batch/syncuser?access_token=ACCESS_TOKEN
     * @param batchSyncUserRequest 增量更新成员请求对象
     * @return 增量更新成员响应对象
     * @throws Exception 异常
     */
    BatchSyncUserResponse batchSyncUser(BatchSyncUserRequest batchSyncUserRequest) throws Exception;


    /**
     * 全量覆盖成员
     * 本接口以userid为主键，全量覆盖企业的通讯录成员，任务完成后企业的通讯录成员与提交的文件完全保持一致。请先下载CSV文件(下载全量覆盖成员模版)，根据需求填写文件内容。
     *
     * 注意事项：
     *
     * 模板中的部门需填写部门ID，多个部门用分号分隔，部门ID必须为数字，根部门的部门id默认为1
     * 文件中存在、通讯录中也存在的成员，完全以文件为准
     * 文件中存在、通讯录中不存在的成员，执行添加操作
     * 通讯录中存在、文件中不存在的成员，执行删除操作。出于安全考虑，下面两种情形系统将中止导入并返回相应的错误码。
     * 需要删除的成员多于50人，且多于现有人数的20%以上
     * 需要删除的成员少于50人，且多于现有人数的80%以上
     * 成员字段更新规则：可自行添加扩展字段。文件中有指定的字段，以指定的字段值为准；文件中没指定的字段，不更新
     * 请求地址：https://qyapi.weixin.qq.com/cgi-bin/batch/replaceuser?access_token=ACCESS_TOKEN
     * @param batchReplaceUserRequest 全量覆盖成员请求对象
     * @return 全量覆盖成员响应对象
     * @throws Exception 异常
     */
    BatchReplaceUserResponse batchReplaceUser(BatchReplaceUserRequest batchReplaceUserRequest) throws Exception;


    /**
     * 全量覆盖部门
     * 本接口以partyid为键，全量覆盖企业的通讯录组织架构，任务完成后企业的通讯录组织架构与提交的文件完全保持一致。请先下载CSV文件(下载全量覆盖部门模版)，根据需求填写文件内容。
     *
     * 注意事项：
     *
     * 文件中存在、通讯录中也存在的部门，执行修改操作
     * 文件中存在、通讯录中不存在的部门，执行添加操作
     * 文件中不存在、通讯录中存在的部门，当部门下没有任何成员或子部门时，执行删除操作
     * 文件中不存在、通讯录中存在的部门，当部门下仍有成员或子部门时，暂时不会删除，当下次导入成员把人从部门移出后自动删除
     * CSV文件中，部门名称、部门ID、父部门ID为必填字段，部门ID必须为数字，根部门的部门id默认为1；排序为可选字段，置空或填0不修改排序, order值大的排序靠前。
     * 请求地址：https://qyapi.weixin.qq.com/cgi-bin/batch/replaceparty?access_token=ACCESS_TOKEN
     * @param batchReplacePartyRequest 全量覆盖部门请求对象
     * @return 全量覆盖部门响应对象
     * @throws Exception 异常
     */
    BatchReplacePartyResponse BatchReplaceParty(BatchReplacePartyRequest batchReplacePartyRequest) throws Exception;


    /**
     * 获取异步任务结果
     * 请求地址：https://qyapi.weixin.qq.com/cgi-bin/batch/getresult?access_token=ACCESS_TOKEN&jobid=JOBID
     * @param batchGetResultRequest 获取异步任务结果请求对象
     * @return 获取异步任务结果响应对象
     * @throws Exception 异常
     */
    BatchGetResultResponse batchGetResult(BatchGetResultRequest batchGetResultRequest) throws Exception;
}
